package com.example.back.mapper;

import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.jdbc.SQL;

public class PostsSqlProvider {
    // 方法名自定义，返回拼接好的SQL字符串
    public String getPostsAndUserSql(@Param("text") String text, @Param("time") String time) {
        // 使用MyBatis提供的SQL工具类拼接SQL
        SQL sql = new SQL() {{
            // SELECT子句：添加所有需要查询的字段
            SELECT("p.id, p.title, p.time, p.text, p.url, p.browse, p.userId");
            SELECT("u.yhm, u.nc, u.tx");
            SELECT("COUNT(c.id) AS commentCount");
            SELECT("(SELECT COUNT(*) FROM `like` WHERE postId = p.id) AS likeCount");
            SELECT("(SELECT COUNT(*) FROM collection WHERE postId = p.id) AS collectCount");

            // FROM和JOIN子句
            FROM("post p");
            LEFT_OUTER_JOIN("user u ON p.userId = u.id");
            LEFT_OUTER_JOIN("comment c ON p.id = c.postId");

            // 动态条件：如果text不为空，添加模糊查询
            if (text != null && !text.isEmpty()) {
                WHERE("p.text LIKE CONCAT('%', #{text}, '%')");
            }
            // 动态条件：如果time不为空，添加模糊查询
            if (time != null && !time.isEmpty()) {
                WHERE("p.time LIKE CONCAT('%', #{time}, '%')");
            }

            // GROUP BY子句：包含所有非聚合字段（避免语法错误）
            GROUP_BY("p.id, p.title, p.time, p.text, p.url, p.browse, p.userId, u.yhm, u.nc, u.tx");
        }};

        // 返回生成的SQL字符串
        return sql.toString();
    }
}